package domein;

import domein.exceptie.InvalidCategorieException;

/**
 * Houd alle informatie van een bepaalt personage bij
 * @author Kenneth De Clercq & Sam Verschueren
 *	
 */
public class Personage {

	private PersonageCategorie categorie;
	private String naam;
	private int schadepunten;
	private Vak hetVak;	// Vak waar de speler op staat
	
	/**
	 * Maakt een nieuw Personage aan
	 * @param naam De naam van het nieuwe personage
	 * @param categorie De PersonageCategorie waar het nieuwe personage bij hoort
	 * @throws IllegalArgumentException 
	 */
	public Personage(String naam, PersonageCategorie categorie, int schadepunten) throws IllegalArgumentException, InvalidCategorieException {
		setNaam(naam);
		setPersonageCategorie(categorie);
		setSchadepunten(schadepunten);
	}
	
	public Personage(String naam, PersonageCategorie categorie) throws IllegalArgumentException, InvalidCategorieException {
		this(naam, categorie, 0);
	}
	
	/**
	 * Geeft de naam van het personage
	 * @return De naam van het personage
	 */
	public String getNaam() {
		return naam;
	}
	
	/**
	 * Verandert de naam van het personage
	 * @param naam De nieuwe naam van het personage
	 */
	private void setNaam(String naam) throws IllegalArgumentException {
		naam = naam.trim();
		
		if(naam!=null && !(naam.equals("")))
			this.naam = naam;
		else
			throw new IllegalArgumentException("Er is een foutieve naam opgegeven.");
	}
	
	/**
	 * Verandert de categorie waar het personage toe hoort
	 * @param categorie De nieuwe categorie van het personage
	 * @throws InvalidCategorieExceptie 
	 */
	private void setPersonageCategorie(PersonageCategorie categorie) throws InvalidCategorieException {
		if(categorie==null)
			throw new InvalidCategorieException();
		this.categorie = categorie;
	}
	
	/**
	 * Geeft de categorie waar het personage bij hoort
	 * @return De PersonageCategorie van het Personage
	 */
	public PersonageCategorie getCategorie() {
		return this.categorie;
	}
	
	/**
	 * Geeft het aantal schadepunten terug
	 * @author Kenneth
	 * @return schadepunten
	 */
	public int getSchadepunten() {
		return schadepunten;
	}
	
	/**
	 * Hiermee kan je het aantal schadepunten instellen
	 * @author Kenneth
	 * @param schadepunten
	 */
	public void setSchadepunten(int schadepunten) {
		this.schadepunten = schadepunten;
	}
	
	public void setVak(Vak vak){
		hetVak = vak;
	}
	
	public Vak getVak(){
		return hetVak;
	}
	
	@Override
	public String toString(){
		return String.format("Personage %s hoort bij categorie %s", naam, categorie.getNaam());
	}
	
	public String geefTextWeergave() {
		return String.valueOf(this.getNaam().charAt(0));
	}
}
